package com.passion.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.passion.common.threadpool.ThreadPoolHelper;
import com.passion.domain.dao.LogSqlDao;
import com.passion.domain.entity.LogSql;
import com.passion.domain.entity.SysUser;
import com.passion.service.LogSqlService;
import org.springframework.stereotype.Service;

import java.util.concurrent.CompletableFuture;

/**
 * 注意service层方法命名规范：
 * 分页查询方法    （使用 page 做前缀）
 * 查询单个对象方法（使用 get 做前缀）
 * 查询多个对象方法（使用 list 做前缀）
 * 统计数量方法    （使用 count 做前缀）
 * 新增方法        （使用 save / insert 做前缀）
 * 删除方法        （使用 remove / delete 做前缀）
 * 修改方法        （使用 update 做前缀）
 * 【t_log_sql】表服务接口
 *
 * @author ZhuYin<zyexplorej2ee @ sina.com>
 * @since 2024年12月26日
 */
@Service
public class LogSqlServiceImpl extends ServiceImpl<LogSqlDao, LogSql> implements LogSqlService {
    /**
     * 方法说明：保存sql执行日志
     *
     * @param sysUser  当前登录用户
     * @param sqlId    sqlId
     * @param wholeSql sql语句
     * @param time     sql执行时间
     * @author ZhuYin
     * @since 2024年12月27日
     */
    @Override
    public void saveSqlLog(SysUser sysUser, String sqlId, String wholeSql, long time) {
        CompletableFuture.runAsync(() -> {
            LogSql log = new LogSql();
            if (sysUser != null) {
                log.setUserId(sysUser.getId());
            }
            log.setSqlKey(sqlId);
            log.setSqlContent(wholeSql);
            log.setCostTime(time);
            super.save(log);
        }, ThreadPoolHelper.asyncLogTaskThreadPool);
    }

}